"""dar explain"""


DARS = {
    0: '成功', 1: '硬件失效', 2: '暂时失效', 3: '拒绝读写', 4: '对象未定义',
    5: '对象接口类不符合', 6: '对象不存在', 7: '类型不匹配', 8: '越界', 9: '数据块不可用',
    10: '分帧传输已取消', 11: '不处于分帧传输状态', 12: '块写取消', 13: '不存在块写状态', 14: '数据块序号无效',
    15: '密码错/未授权', 16: '通信速率不能更改', 17: '年时区数超', 18: '日时段数超', 19: '费率数超',
    20: '安全认证不匹配', 21: '重复充值', 22: 'ESAM验证失败', 23: '安全认证失败', 24: '客户编号不匹配',
    25: '充值次数错误', 26: '购电超囤积', 27: '地址异常', 28: '对称解密错误', 29: '非对称解密错误',
    30: '签名错误', 31: '电能表挂起', 32: '时间标签无效', 33: '请求超时', 34: 'ESAM的P1P2不正确',
    35: 'ESAM的LC错误', 255: '其它',
}

UNITS = {  # 副录B
    1: 'a', 2: 'mo', 3: 'wk', 4: 'd', 5: 'h',
    6: 'min', 7: 's', 8: '°', 9: '℃', 10: '货币',
    11: 'm', 12: 'm/s', 13: 'm3', 14: 'm3', 15: 'm3/h',
    16: 'm3/h', 17: 'm3/d', 18: 'm3/d', 19: 'l', 20: 'kg',
    21: 'N', 22: 'Nm', 23: 'P', 24: 'bar', 25: 'J',
    26: 'J/h', 27: 'W', 28: 'kW', 29: 'VA', 30: 'kVA',
    31: 'var', 32: 'kvar', 33: 'kWh', 34: 'kVAh', 35: 'kvarh',
    36: 'A', 37: 'C', 38: 'V', 39: 'V/m', 40: 'F',
    41: 'Ω', 42: 'Ωm2/m', 43: 'Wb', 44: 'T', 45: 'A/m',
    46: 'H', 47: 'Hz', 48: '1/(Wh)', 49: '1/(varh)', 50: '1/(VAh)',
    51: '%', 52: 'byte', 53: 'dBm', 54: '元/kWh', 55: 'Ah',
    56: 'ms',
}

SERVICES = {
    '01': '预连接请求',
    '02': '建立应用连接请求',
    '03': '断开应用连接请求',
    '81': '预连接响应',
    '82': '建立应用连接响应',
    '83': '断开应用连接响应',
    '84': '断开应用连接通知',
    '0501': '读取一个对象属性请求',
    '0502': '读取若干个对象属性请求',
    '0503': '读取一个记录型对象属性请求',
    '0504': '读取若干个记录型对象属性请求',
    '0505': '读取分帧响应的下一个数据块请求',
    '8501': '读取一个对象属性的响应',
    '8502': '读取若干个对象属性的响应',
    '8503': '读取一个记录型对象属性的响应',
    '8504': '读取若干个记录型对象属性的响应',
    '8505': '分帧响应一个数据块',
    '0601': '设置一个对象属性请求',
    '0602': '设置若干个对象属性请求',
    '0603': '设置后读取若干个对象属性请求',
    '8601': '设置一个对象属性的确认信息响应',
    '8602': '设置若干个对象属性的确认信息响应',
    '8603': '设置的确认信息以及读取的响应',
    '0701': '操作一个对象方法请求',
    '0702': '操作若干个对象方法请求',
    '0703': '操作若干个对象方法后读取若干个对象属性请求',
    '8701': '操作一个对象方法的响应',
    '8702': '操作若干个对象方法的响应',
    '8703': '操作若干个对象方法后读取若干个属性的响应',
    '0801': '上报若干个对象属性的响应',
    '0802': '上报若干个记录型对象属性的响应',
    '0803': '上报透明数据的响应',
    '8801': '上报若干个对象属性',
    '8802': '上报若干个记录型对象属性',
    '8803': '上报透明数据',
    '0901': '代理读取若干个服务器的若干个对象属性请求',
    '0902': '代理读取一个服务器的一个记录型对象属性请求',
    '0903': '代理设置若干个服务器的若干个对象属性请求',
    '0904': '代理设置后读取若干个服务器的若干个对象属性请求',
    '0905': '代理操作若干个服务器的若干个对象方法请求',
    '0906': '代理操作后读取若干个服务器的若干个对象方法和属性请求',
    '0907': '代理透明转发命令请求',
    '8901': '代理读取若干个服务器的若干个对象属性响应',
    '8902': '代理读取一个服务器的一个记录型对象属性响应',
    '8903': '代理设置若干个服务器的若干个对象属性响应',
    '8904': '代理设置后读取若干个服务器的若干个对象属性响应',
    '8905': '代理操作若干个服务器的若干个对象方法响应',
    '8906': '代理操作后读取若干个服务器的若干个对象方法和属性响应',
    '8907': '代理透明转发命令响应',
    '10': '安全请求',
    '90': '安全响应',
    '6E': '异常响应',
    'EE': '异常响应',
}


def get_dar(index):
    """get dar"""
    return DARS.get(index, '未知错误(%d)' % index)


def get_unit(index):
    """get unit"""
    return UNITS.get(index, '未知单位(%d)' % index)


def get_service(service_text):
    """get service"""
    return SERVICES.get(service_text, '未知服务(%s)' % service_text)

